// 引入koa
const Koa = require('koa')
// 引入全局配置文件
const { port, staticDir } = require('./config')
// 引入路由
const Routers = require('./app/routers')
// 处理静态组件
const KoaStatic = require('koa-static')
// 引入处理错误的中间件
const err = require('./app/middleware/error')
// 引入重写的中间件
const rewriteUrl = require('./app/middleware/RewriteUrl')
// 处理post和图片上传，处理请求体数据
const KoaBody = require('koa-body')
// 处理请求体数据
const koaBodyConfig = require('./app/middleware/koaBodyConfig')
// session
const Session = require('koa-session')
const CONFIG = require('./app/middleware/session')
// 判断是否登录的中间件
const isLogin = require('./app/middleware/isLogin')
/*引入部分结束*/

let app = new Koa()

// 使用静态组件
app.use(KoaStatic(staticDir))
// 处理错误的中间件
app.use(err)
// 重写的中间件
app.use(rewriteUrl)
// 处理请求体
app.use(KoaBody(koaBodyConfig))
// session
app.keys = ['session app keys']
app.use(Session(CONFIG, app))
// 判断是否登录的中间件
app.use(isLogin)

app.use(async (ctx, next) => {
  ctx.state.user = ctx.session.user;
  await next();
});

/*引用部分结束 */

// 路由
app.use(Routers.routes()).use(Routers.allowedMethods())

app.listen(port, () => {
  console.log(`服务器启动在${port}端口`)
})
